02. 软件开发和优化
软件开发
编写功能正常的代码当然是软件开发者的首要目标。在有些应用中,代码效率可能非常重要。
代码开发过程可以分解为以下步骤:
- 代码设计
- 设计部署
- 测试和故障修复
- 优化
关于这些步骤(设计、部署、测试)的详细说明,请参见 链接 。
之前讲过,代码优化包括很多方面,涉及到硬件、编译器、算法和 C++ 语言本身。本课中,我们重点研究 C++ 语言。你刚刚学过的 CPU 和 RAM 知识有助于你了解代码为什么可以运行更快。
你将有机会了解并应用一些可以让 C++ 运行更快的技巧。每个练习都提供了一个“较慢的”代码版本,以及让代码更快的技巧。你需要应用该技巧,然后查看代码运行速度有多大提升。这些技巧并不是优化 C++ 代码的所有方式,但可以帮助你了解内存、CPU 和编码选择是如何影响代码运行速度的。
在课程最后,你会收到一些文件,它们构成了一个可正常工作的 C++ 直方图滤波器。你的任务,是使用本课学到的技巧,让直方图滤波器代码运行更快。
如何优化:测试 vs 直觉
要优化你的代码,你需要靠测试和验证,而不是直觉!
测试你的代码,找到在时间、内存和电力使用方面最低效的区域。然后,确认你做的所有变更的确让代码更高效了。如果你先测试,你可能发现,你的代码可能已经足够高效,可以满足应用要求了。
如果你在优化大量代码,你可能需要使用分析器 (Profiler) 工具。Profiler 是一个软件,可以测量部分代码执行所需时间或代码使用多少资源。它能帮助你找到拥塞点,让你先优化最低效的代码部分。
Visual Studio 和 Xcode 都带有分析器。以下链接提供了相关介绍:
使用标准时钟测试你的代码
在下面的练习中,我们为你设置了一些简单的代码。你需要测量使用 C++ 标准时钟运行函数需要多久。
优化方式为:
- 测量函数运行所需时间
- 修改部分代码
- 再次运行代码,检查速度有无提升
分析代码已经为你设置好了,看起来是这样的:
#include <ctime>
std::clock_t start;
double duration;
start = std::clock();
function_name(var1, var2);
duration = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;
std::cout << "duration milliseconds initialize beliefs " << 1000 * duration << '\n';
代码首先存储当前的标准时钟时间,然后运行函数,然后计算所用的时间。
标准库始终使用 时钟周期 测量时间。时钟周期类似计数器变量,随时间以恒定速率增加。但时间长度因系统而异。因此,除以常量 CLOCKS_PER_SEC 后,即可得到以秒为单位的结果。CLOCKS_PER_SEC 变量在 ctime 库中定义。
编程最重要的部分
SOLUTION:
获得符合功能预期的代码时钟周期